package com.atguigu.gulimall.product.controller;

import com.atguigu.gmall.common.result.Result;
import com.atguigu.gulimall.product.entity.BaseTrademark;
import com.atguigu.gulimall.product.service.BaseTrademarkService;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * @author nicc
 * @version 1.0
 * @className TrademarkController
 * @description TODO
 * @date 2022-09-27 08:49
 *
 *  常见前端响应状态码(404、200、503、405)
 *      405 请求方式不允许（请求路径和分页的完全格式一致，springmvc准备用分页处理这个请求） -> GET和DELETE没有匹配上，所以405
 *      400 Bad Request  请求方式GET请求路径 /baseTrademark/get/16 完全匹配到分页上了,但数据类型不匹配
 *
 *      4xx:前端问题
 *      5xx:后端问题
 */
@RestController
@RequestMapping("/admin/product")
public class TrademarkController {

    @Autowired
    private BaseTrademarkService baseTrademarkService;

    /**
     * 分页查询品牌数据
     * @param pageNum: 初始页码
     * @param limit: 每页大小
     * @return 返回分页结果
     */
    @GetMapping("/baseTrademark/{pageNum}/{limit}")
    public Result baseTrademarkByPage(@PathVariable("pageNum") Long pageNum,
                                      @PathVariable("limit") Long limit){

        Page<BaseTrademark> page = new Page<>(pageNum, limit);
        Page<BaseTrademark> trademarkPage = baseTrademarkService.page(page);
        return Result.ok(trademarkPage);
    }

    /**
     * 保存品牌信息
     * @return
     */
    @PostMapping("/baseTrademark/save")
    public Result saveBaseTrademark(@RequestBody BaseTrademark baseTrademark){

        baseTrademarkService.save(baseTrademark);
        return Result.ok();
    }

    /**
     * 根据品牌Id查询品牌信息,用于数据回显
     * @param id 品牌Id
     * @return
     */
    @GetMapping("/baseTrademark/get/{id}")
    public Result getBaseTrademarkById(@PathVariable("id") Long id){
        BaseTrademark baseTrademark = baseTrademarkService.getById(id);
        return Result.ok(baseTrademark);
    }

    /**
     * 根据品牌Id修改品牌信息
     * @param baseTrademark
     * @return
     */
    @PutMapping("/baseTrademark/update")
    public Result updateBaseTrademark(@RequestBody BaseTrademark baseTrademark){
        baseTrademarkService.updateById(baseTrademark);
        return Result.ok();
    }

    /**
     * 根据品牌Id删除品牌信息
     * @param id
     * @return
     */
    @DeleteMapping("/baseTrademark/remove/{id}")
    public Result removeBaseTrademarkById(@PathVariable("id") Long id){
        baseTrademarkService.removeById(id);
        return Result.ok();
    }

    /**
     * 查询所有品牌列表
     * @return
     */
    @GetMapping("/baseTrademark/getTrademarkList")
    public Result getTrademarkList(){
        List<BaseTrademark> list = baseTrademarkService.list();
        return Result.ok(list);
    }

}